{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-11-29T03:18:03.031625Z",
     "start_time": "2018-11-29T03:18:02.964582Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#可视化树\n",
    "'''\n",
    "Created on Oct 14, 2010\n",
    "@author: Peter Harrington\n",
    "'''\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "decisionNode = dict(boxstyle=\"sawtooth\", fc=\"0.8\")\n",
    "leafNode = dict(boxstyle=\"round4\", fc=\"0.8\")\n",
    "arrow_args = dict(arrowstyle=\"<-\")\n",
    "\n",
    "def getNumLeafs(myTree):\n",
    "    numLeafs = 0\n",
    "    firstStr = list(myTree.keys())[0]\n",
    "    secondDict = myTree[firstStr]\n",
    "    for key in secondDict.keys():\n",
    "        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes\n",
    "            numLeafs += getNumLeafs(secondDict[key])\n",
    "        else:   numLeafs +=1\n",
    "    return numLeafs\n",
    "\n",
    "def getTreeDepth(myTree):\n",
    "    maxDepth = 0\n",
    "    firstStr = list(myTree.keys())[0]\n",
    "    secondDict = myTree[firstStr]\n",
    "    for key in secondDict.keys():\n",
    "        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes\n",
    "            thisDepth = 1 + getTreeDepth(secondDict[key])\n",
    "        else:   thisDepth = 1\n",
    "        if thisDepth > maxDepth: maxDepth = thisDepth\n",
    "    return maxDepth\n",
    "\n",
    "def plotNode(nodeTxt, centerPt, parentPt, nodeType):\n",
    "    createPlot.ax1.annotate(nodeTxt, xy=parentPt,  xycoords='axes fraction',\n",
    "             xytext=centerPt, textcoords='axes fraction',\n",
    "             va=\"center\", ha=\"center\", bbox=nodeType, arrowprops=arrow_args )\n",
    "    \n",
    "def plotMidText(cntrPt, parentPt, txtString):\n",
    "    xMid = (parentPt[0]-cntrPt[0])/2.0 + cntrPt[0]\n",
    "    yMid = (parentPt[1]-cntrPt[1])/2.0 + cntrPt[1]\n",
    "    createPlot.ax1.text(xMid, yMid, txtString, va=\"center\", ha=\"center\", rotation=30)\n",
    "\n",
    "def plotTree(myTree, parentPt, nodeTxt):#if the first key tells you what feat was split on\n",
    "    numLeafs = getNumLeafs(myTree)  #this determines the x width of this tree\n",
    "    depth = getTreeDepth(myTree)\n",
    "    firstStr = list(myTree.keys())[0]     #the text label for this node should be this\n",
    "    cntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree.totalW, plotTree.yOff)\n",
    "    plotMidText(cntrPt, parentPt, nodeTxt)\n",
    "    plotNode(firstStr, cntrPt, parentPt, decisionNode)\n",
    "    secondDict = myTree[firstStr]\n",
    "    plotTree.yOff = plotTree.yOff - 1.0/plotTree.totalD\n",
    "    for key in secondDict.keys():\n",
    "        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes   \n",
    "            plotTree(secondDict[key],cntrPt,str(key))        #recursion\n",
    "        else:   #it's a leaf node print the leaf node\n",
    "            plotTree.xOff = plotTree.xOff + 1.0/plotTree.totalW\n",
    "            plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), cntrPt, leafNode)\n",
    "            plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key))\n",
    "    plotTree.yOff = plotTree.yOff + 1.0/plotTree.totalD\n",
    "#if you do get a dictonary you know it's a tree, and the first element will be another dict\n",
    "\n",
    "def createPlot(inTree):\n",
    "    fig = plt.figure(1, facecolor='white')\n",
    "    fig.clf()\n",
    "    axprops = dict(xticks=[], yticks=[])\n",
    "    createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)    #no ticks\n",
    "    #createPlot.ax1 = plt.subplot(111, frameon=False) #ticks for demo puropses \n",
    "    plotTree.totalW = float(getNumLeafs(inTree))\n",
    "    plotTree.totalD = float(getTreeDepth(inTree))\n",
    "    plotTree.xOff = -0.5/plotTree.totalW; plotTree.yOff = 1.0;\n",
    "    plotTree(inTree, (0.5,1.0), '')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 手写ID3决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-11-29T03:18:07.959818Z",
     "start_time": "2018-11-29T03:18:06.147542Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ce290416a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test: no lenses\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "\"\\n#测试数据\\ndef createDataSet():\\n    dataSet = [[1, 1, 'yes'],\\n               [1, 1, 'yes'],\\n               [1, 0, 'no'],\\n               [0, 1, 'no'],\\n               [0, 1, 'no']]\\n    labels = ['no surfacing','flippers']\\n    #change to discrete values\\n    return dataSet, labels\\n\\ndata,feature_names = createDataSet()\\ntree = createTree(data, feature_names)\\nprint(classify(tree, feature_names,[1,0]))\\n\""
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from math import *\n",
    "import operator\n",
    "import pickle\n",
    "\n",
    "#计算熵\n",
    "def entropy(data):\n",
    "    num = len(data)\n",
    "    num_labels ={}\n",
    "    for vec in data:\n",
    "        num_labels[vec[-1]] = num_labels.get(vec[-1],0)+1\n",
    "    ent = 0.0\n",
    "    for key in num_labels.keys():\n",
    "        prob = float(num_labels[key])/num\n",
    "        ent -= prob*log(prob,2)\n",
    "    return ent\n",
    "\n",
    "#根据给定特征划分数据集, axis是特征对应的编号，value是匹配的值\n",
    "def splitDataSet(data, axis, value):\n",
    "    res = []\n",
    "    for vec in data:\n",
    "        if vec[axis] == value:\n",
    "            res.append(vec[:axis] + vec[axis+1:])\n",
    "    return res\n",
    "\n",
    "#遍历数据集，计算每种特征对应的信息增益，选出增益最小的，该特征即为用于分类的特征\n",
    "def chooseFeature(data):\n",
    "    num_feature = len(data[0])-1\n",
    "    #计算H(D)\n",
    "    base_ent = entropy(data)\n",
    "    max_gain = 0.0\n",
    "    best_feature = 0\n",
    "    for i in range(num_feature):\n",
    "        #找出feature的种类\n",
    "        uniqueFeature = set([vec[i] for vec in data])\n",
    "        #对每个feature计算其对应的条件信息熵\n",
    "        sub_ent = 0.0\n",
    "        for feature in uniqueFeature:\n",
    "            sub_data = splitDataSet(data, i, feature)\n",
    "            prob = len(sub_data)/float(len(data))\n",
    "            sub_ent += prob*entropy(sub_data)\n",
    "        #计算每个feature对应的信息增益\n",
    "        gain = base_ent - sub_ent\n",
    "        #选择最大的信息增益，其对应的feature即为最佳的feature\n",
    "        if gain > max_gain:\n",
    "            max_gain = gain\n",
    "            best_feature = i\n",
    "    return best_feature\n",
    "            \n",
    "#递归构建决策树\n",
    "#原始数据集-> 递归地基于最好的属性划分数据集->终止条件：所有属性已经用过或划分后的数据集每个集合只属于一个label,\n",
    "#若所有属性用完但是每个划分属性不都属于一个label，就使用“多数表决”的方法。\n",
    "\n",
    "#多数表决函数\n",
    "def majority(classes):\n",
    "    classCount = {}\n",
    "    for item in classes:\n",
    "        classCount[item] = classCount.get(item,0) + 1\n",
    "    sortedClassesCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse=True)\n",
    "    #返回表决最多的label\n",
    "    return sortedClassCount[0][0]\n",
    "\n",
    "#递归构建树，存入字典中，以便随后的可视化.feature_name是feature的名字，仅是为了可视化方便。\n",
    "def createTree(data, feature_names):\n",
    "    #找出data数据集中所有的labels\n",
    "    classList = [item[-1] for item in data]\n",
    "    #如果只属于一种label，则停止构建树\n",
    "    if len(set(classList)) == 1:\n",
    "        return classList[0]\n",
    "    #若果所有features属性都已经使用完，也停止构建树\n",
    "    #每次用完一个特征都会删除，这样最后数据集data中只剩下最后一位的label位\n",
    "    if len(data[0]) == 1:\n",
    "        return majority(classList)\n",
    "    bestFeat = chooseFeature(data)\n",
    "    bestFeatName = feature_names[bestFeat]\n",
    "    #bestFeatName是用于分离数据集的特征的名字，作为根\n",
    "    tree = {bestFeatName:{}}\n",
    "    #del只删除元素，但是原来的index不变\n",
    "    sub_names = feature_names[:]\n",
    "    del(sub_names[bestFeat])\n",
    "    uniqFeats = set([item[bestFeat] for item in data])\n",
    "    #对于每个feature，递归地构建树\n",
    "    for feature in uniqFeats:\n",
    "        tree[bestFeatName][feature] = createTree(splitDataSet(data,bestFeat,feature), sub_names)\n",
    "    return tree\n",
    "    \n",
    "\n",
    "#分类函数,也是递归地分类（从根到叶节点）\n",
    "def classify(tree, feature_names, test_data):\n",
    "    #找到根，即第一个用于分类的特征\n",
    "    root = list(tree.keys())[0]\n",
    "    #找到根对应的子树\n",
    "    sub_trees = tree[root]\n",
    "    #找出对应该特征的index\n",
    "    feat_index = feature_names.index(root)\n",
    "    #对所有子树，将测试样本划分到属于其的子树\n",
    "    for key in sub_trees.keys():\n",
    "        if test_data[feat_index] == key:\n",
    "            #检查是否还有子树，或者已经到达叶节点\n",
    "            if type(sub_trees[key]).__name__ == 'dict':\n",
    "                #若还可以再分，则继续向下找\n",
    "                return classify(sub_trees[key], feature_names,test_data)\n",
    "            else:\n",
    "                #否则直接返回分的类\n",
    "                return sub_trees[key]\n",
    "\n",
    "#存储树（存储模型）\n",
    "def stroeTree(tree, filename):\n",
    "    fw = open(filename,'w')\n",
    "    pickle.dump(tree,fw)\n",
    "    fw.close()\n",
    "    return\n",
    "   \n",
    "#提取树\n",
    "def grabTree(filename):\n",
    "    fr = open(filename)\n",
    "    return pickle.load(fr)\n",
    "\n",
    "#预测隐形眼镜类型，已知数据集，如何判断患者需要佩戴的眼镜类型\n",
    "fr = open('lenses.txt')\n",
    "lenses = [line.strip().split('\\t') for line in fr.readlines()]\n",
    "feature_names = ['age', 'prescript','astigmatic','tearRate']\n",
    "#构建树\n",
    "tree = createTree(lenses,feature_names)\n",
    "#可视化树\n",
    "createPlot(tree)\n",
    "#测试\n",
    "print('test:',classify(tree,feature_names,['pre','myope','no','reduced']))\n",
    "'''\n",
    "#测试数据\n",
    "def createDataSet():\n",
    "    dataSet = [[1, 1, 'yes'],\n",
    "               [1, 1, 'yes'],\n",
    "               [1, 0, 'no'],\n",
    "               [0, 1, 'no'],\n",
    "               [0, 1, 'no']]\n",
    "    labels = ['no surfacing','flippers']\n",
    "    #change to discrete values\n",
    "    return dataSet, labels\n",
    "\n",
    "data,feature_names = createDataSet()\n",
    "tree = createTree(data, feature_names)\n",
    "print(classify(tree, feature_names,[1,0]))\n",
    "'''"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### sklearn分类决策树，使用的是CART树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-11-29T05:39:14.299851Z",
     "start_time": "2018-11-29T05:39:14.257847Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "no lenses\n"
     ]
    }
   ],
   "source": [
    "#sklearn 决策树实现\n",
    "from sklearn import tree\n",
    "\n",
    "def DT(train_data, test_data, train_class):\n",
    "    clf = tree.DecisionTreeClassifier()\n",
    "    clf = clf.fit(train_data, train_class)\n",
    "    return clf.predict(test_data)\n",
    "    \n",
    "fr = open('lenses.txt')\n",
    "lenses = [line.strip().split('\\t') for line in fr.readlines()]\n",
    "#将class的label从源数据集中分离\n",
    "train_data = []\n",
    "train_class = []\n",
    "for lense in lenses:\n",
    "    train_data.append(lense[:len(lense)-1])\n",
    "    train_class.append(lense[-1])\n",
    "test_data = [['pre','myope','no','reduced']]\n",
    "#将string的特征和class标签转化为int型\n",
    "unique_feature = set()\n",
    "unique_label = set()\n",
    "for data in train_data:\n",
    "    for i in range(len(data)):\n",
    "        unique_feature.add(data[i])\n",
    "for i in range(len(train_class)):\n",
    "    unique_label.add(train_class[i])\n",
    "unique_feature = list(unique_feature)\n",
    "unique_label = list(unique_label)\n",
    "for i in range(len(train_data)):\n",
    "    for j in range(len(train_data[i])):\n",
    "        train_data[i][j] = unique_feature.index(train_data[i][j])\n",
    "for i in range(len(train_class)):\n",
    "    train_class[i] = unique_label.index(train_class[i])\n",
    "for i in range(len(test_data)):\n",
    "    for j in range(len(test_data[i])):\n",
    "        test_data[i][j] = unique_feature.index(test_data[i][j])\n",
    "    \n",
    "    \n",
    "print(unique_label[DT(train_data,test_data,train_class)[0]])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
